IPC에 대해서 설명해주세요.
IPC란 프로세스들 간에 데이터 및 정보를 주고 받기 위한 메커니즘으로, 커널에서 IPC를 위한 도구를 System Call의 형태로 제공한다.
종종 여러 프로세스가 협업할 필요가 있는 경우가 있다. 예를 들어 브라우저는 렌더러 프로세스와 각 플러그인 별 프로세스를 가지는 프로세스이다.
렌더러 프로세스는 HTML/CSS를 읽어 렌더링하고 인터프리터로 JS 코드를 실행해야 한다. 각 역할별 프로그램을 분리하여 모듈화 한 것이다. 이런 실행환경에서는 프로세스 간의 통신이 가능해야한다. 프로세스간 통신은 운영체제의 도움이 필요하다.
- 프로세스 내부 데이터 통신: 하나의 프로세스 내에 2개 이상의 스레드가 존재하는 경우의 통신이다. 프로세스 내부의 스레드는 전역 변수나 파일을 이용하여 데이터를 주고 받는다.
- 프로세스 간 데이터 통신: 같은 컴퓨터에 있는 여러 프로세스끼리 통신하는 경우로, 공용 파일 또는 운영체제가 제공하는 파이프를 사용하여 통신한다.
- 네트워크를 이용한 데이터 통신: 여러 컴퓨터가 네트워크로 연결되어 있을 때도 통신이 가능한데, 이 경우 프로세스는 소켓을 이용하여 데이터를 주고받는다. 이처럼 소켓을 이용하는 프로세스간 통신을 네트워킹이라고 한다. 다른 컴퓨터에 있는 함수를 호출하여 통신하는 원격 프로시저 호출도 여기에 해당한다.
프로세스간 통신의 분류
통신 방향에 따른 분류
통신은 데이터가 전송되는 방향에 따라 양방향 통신(duplex communication), 반양방향 통신(half-duplex communication), 단방향 통신(simplex communication)으로 나뉜다.
- 양방향 통신: 데이터를 동시에 양쪽 방향으로 전송할 수 있는 구조로, 일반적인 통신은 모두 양방향 통신이다. 프로세스간 통신에서는 소켓 통신이 양방향 통신에 해당한다.
- 반양방향 통신: 데이터를 양쪽 방향으로 전송할 수 있지만 동시 전송은 불가능하고 특정 시점에 한쪽 방향으로 전송할 수 있는 구조이다. 반양방향 통신의 대표적인 예는 무전기이다.
- 단방향 통신: 모스 신호처럼 한쪽 방향으로만 데이터를 전송할 수 있는 구조이다. 프로세스 간 통신에서는 전역 변수와 파이프가 단방향 통신에 해당한다.
통신 구현 방식에 따른 분류
전역 변수를 사용하는 통신 방식의 가장 큰 문제는 언제 데이터를 보낼지 데이터를 받는 쪽에서 모른다는 것이다. 그러므로 데이터를 받는 쪽에서는 반복적으로 전역 변수의 값을 점검하는 수밖에 없다. 우편함에 편지가 있는지 수시로 열어보는 것처럼 상태 변화를 살펴보기 위해 반복문을 무한 실행하며 기다리는 것을 바쁜대기(busy waiting)라고 한다. 세스템 차원에서 큰 자원 낭비인 바쁜 대기는 안 좋은 프로그램의 전형적인 예이다.
바쁜 대기 문제를 해결하기 위해서는 데이터가 도착했음을 알려주는 동기화(synchronization)를 사용한다. 동기화를 사용하면 바쁜 대기를 하지 않아도 운영체제가 알아서 알려준다.
프로세스 간 통신은 동기화 기느잉 있느냐 없느냐에 따라 대기가 있는 통신(blocking communication)과 대기가 없는 통신(non-blocking communication)으로 구분된다. 대기가 있는 통신은 동기화 통신, 대기가 없는 통신은 비동기화 통신이라고도 한다.
- 대기가 있는 통신: 동기화를 지원하는 통신 방식이다. 데이터를 받는 쪽은 데이터가 도착할 때까지 자동으로 대기 상태에 머물러 있다.
- 대기가 없는 통신: 동기화를 지원하지 않는 통신 방식이다. 데이터를 받는 쪽은 바쁜 대기를 사용하여 데이터가 도착했는지 여부를 직접 확인한다.
분류 방식 | 종류 | 예 |
---|---|---|
통신 방향에 따른 분류 | 양방향 통신 | 일반적 통신, 소켓 |
반양방향 통신 | 무전기 | |
단방향 통신 | 전역 변수, 파일, 파이프 | |
통신 방향에 따른 분류 | 대기가 있는 통신(동기화 통신) | 파이프, 소켓 |
대기가 없는 통신(비동기화 통신) | 전역 변수, 파일 |